package model.utils;

import java.util.ArrayList;
import java.util.List;

import de.ailis.pherialize.MixedArray;
import de.ailis.pherialize.Pherialize;
import model.PuntoRuta;

/**
 * Conveierte la ruta de php serializado a java
 * 
 * @author Matias
 * 
 */
public class RutaConverter {

	public RutaConverter() {

	}

	/**
	 * Convierte un String serializado en php a java.
	 * 
	 * @param rutaSerializada
	 *            ruta serializada en php
	 * @return List<PuntoRuta> ruta convertida al modelo de java
	 */
	public List<PuntoRuta> convertirRuta(String rutaSerializada) {

		List<PuntoRuta> listaPuntoRuta = new ArrayList<PuntoRuta>();
		MixedArray list;
		list = Pherialize.unserialize(rutaSerializada).toArray();

		for (int i = 0; i < list.size(); i++) {
			String punto = list.get(i).toString();
			PuntoRuta puntoRuta = parsearPunto(i, punto);
			listaPuntoRuta.add(puntoRuta);
		}

		return listaPuntoRuta;
	}

	private PuntoRuta parsearPunto(int id, String punto) {
		PuntoRuta puntoRuta = new PuntoRuta();

		punto = formatearPunto(punto);

		String[] parametros = obtenerParametros(punto);

		puntoRuta.setIdPunto(id);
		puntoRuta.setLatitud(obtenerValores(parametros[0]));
		puntoRuta.setLongitud(obtenerValores(parametros[1]));

		return puntoRuta;
	}

	/**
	 * Obtiene valor del parametro.
	 * 
	 * @param parametro
	 * @return double con el valor del parametro
	 */
	private double obtenerValores(String parametro) {
		String[] valores = parametro.split("=");
		return Double.parseDouble(valores[1]);
	}

	/**
	 * Quita llaves y espacios del string.
	 * 
	 * @param punto
	 * @return String formateado
	 */
	private String formatearPunto(String punto) {
		punto = punto.replace("{", "");
		punto = punto.replace("}", "");
		punto = punto.trim();
		return punto;
	}

	/**
	 * Obtiene parametros.
	 * 
	 * @param punto
	 * @return String[] parametros
	 */
	private String[] obtenerParametros(String punto) {

		String[] parametros = punto.split(",");

		return parametros;
	}

}
